package com.xhh.nphm.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xhh.nphm.common.core.domain.QueryConditionVo;
import com.xhh.nphm.system.domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 信件拟派工单业务接口
* @author Administrator
* @description 针对表【mWfSendBack】的数据库操作Service
* @createDate 2022-06-08 12:19:37
*/
public interface MwfSendBackService extends IService<MwfSendBack> {
    /**
     * 下级退回信件工单审核列表数据
     * @param mwfSendBack 信件拟派工单
     * @param workFormNo 信件工单编号
     * @return 列表数据
     */
    List<Map<String, Object>> mmReturnFlowJson(MwfSendBack mwfSendBack,String workFormNo);

    /**
     * 市级未签收列表数据
     *
     * @param deptNo 登录用户部门编号
     * @param workFormNo 工单编号
     * @param mwfSendBack 信件拟派工单
     * @return 列表数据
     */
    List<Map<String, Object>> signNotListJson(String deptNo,String workFormNo,MwfSendBack mwfSendBack);

    List<Map<String, Object>> signNotListJson_gxq(String deptNo,String workFormNo,MwfSendBack mwfSendBack);

    /**
     * 待本部门回复列表数据
     *
     * @param deptNo 登录用户部门编号
     * @param qc 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> replyWaitJson(String deptNo,QueryConditionVo qc);

    /**
     * 待本部门回复列表数据导出
     *
     * @param deptNo 登录用户部门编号
     * @param qc 查询条件
     * @return 列表数据
     */
    List<ReplyWaitMailExcel> replyWaitJsonExport(String deptNo,QueryConditionVo qc);

    List<MwfSendBack> selectByWfId(String pkId);

    int deleteByIds(String[] ids);

    /**
     * 拟办部门列表数据
     * @param wfId
     * @return
     */
    List<MwfSendBack> sendDeptListJson(Integer wfId);

    /**
     * 查找信件拟派工单
     * @param wfId 工单编号
     * @param sdeptId 派发部门编号
     * @return 拟派工单列表
     */
    List<MwfSendBack> ltSendBackMain(int wfId, String sdeptId);

    int updateSendBack(MwfSendBack sendBackEty);

    /**
     * 审核本部门回复列表数据
     * @param deptId 当前登录用户部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> replyChkJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 本部门已办毕列表数据
     * @param deptId 当前登录用户部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> replyOverJson(String deptId, String workFormNo, String sdeptName);

    /**
     * 根据用户角色编号和部门编号 查询全区实时满意情况
     *
     * @param roleId 角色编号
     * @param deptId 部门编号
     * @return List<Map>
     */
    List<Map> psMailTotalHandleState(String roleId,String deptId,boolean flag);

    /**
     * 查找超出办理期限的工单数据
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> muBlueSJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找未超出办理期限的工单数据
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> muRedSJson(Long deptId, String workFormNo, String sdeptName);


    /**
     * 查找待分发下级工单数据
     * @param deptId 部门id
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 工单列表数据
     */
    List<Map<String, Object>> sendWaitListJson(Long deptId, String workFormNo, String sdeptName);

    List<Map<String, Object>> sendWaitListJson_gxq(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找上级不同意退回工单数据
     * @param deptId 部门编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> notPassListJson(Long deptId,String workFormNo, String sdeptName);

    /**
     * 查找下级退回工单数据
     * @param deptId 部门编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonBackJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找下级已退工单数据
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonAgreeBackJson(Long deptId, String workFormNo, String sdeptName,String spareString);

    /**
     * 查找下级已退工单数据
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonSignNotJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找退回的工单数据
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 派发单位
     * @return 列表数据
     */
    List<Map<String, Object>> deptBackJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找信件办理中M 列表数据
     * @param params
     * @return
     */
    List<Map<String, Object>> rptReplyOverListJson(HashMap<String, Object> params);

    /**
     * 查找信件未转派 列表数据
     * @param params
     * @return
     */
    List<Map<String, Object>> rptSendWaitListJson(HashMap<String, Object> params);

    List<Map<String, Object>> rptSendWaitListJson_gxq(HashMap<String, Object> params);

    /**
     * 查找被市级拒退工单列表数据
     * @param params
     * @return
     */
    List<Map<String, Object>> rptNotPassListJson(HashMap<String, Object> params);

    /**
     * 查找临期工单列表
     * @param params
     * @return
     */
    List<Map<String, Object>> muBlueJson(HashMap<String, Object> params);

    /**
     * 查找超期工单列表
     * @param params
     * @return
     */
    List<Map<String, Object>> muRedJson(HashMap<String, Object> params);

    /**
     * 加载承办单位未签收M列表数据
     * @param params
     * @return
     */
    List<Map<String, Object>> SonSignNotJson(HashMap<String, Object> params);

    List<Map<String, Object>> SonSignNotJson_gxq(HashMap<String, Object> params);

    /**
     * 加载承办单位已退M列表数据
     * @param params
     * @return
     */
    List<Map<String, Object>> SonAgreeBackJson(HashMap<String, Object> params);

    List<Map<String, Object>> SonAgreeBackJson_gxq(HashMap<String, Object> params);

    /**
     * 加载未签收工单列表数据
     *
     * @return 列表数据
     */
    List<Map<String, Object>> rptSignNotJson(String sbdeptId, MwfSendBack sendBackEty);

    /**
     * 加载已退工单列表数据
     *
     * @return 列表数据
     */
    List<Map<String, Object>> rptDeptBackJson(HashMap<String, Object> params);

    /**
     * 加载下级办理中列表数据
     * @param qc 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> listSonWaitJson(QueryConditionVo qc);


    List<Map<String, Object>> listSonWaitJson_gxq(QueryConditionVo qc);

    /**
     * 加载下级已办毕列表数据
     * @param sendBackEty 查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<Map<String, Object>> listSonOverJson(MwfSendBack sendBackEty, Long deptId);

    /**
     * 加载派单管理列表数据
     * @param sendBack 查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<Map<String, Object>> sendBackListJson(MwfSendBack sendBack, Long deptId);

    /**
     * 检查二级部门下派的派单记录是否有下级回复
     * @param wfId 工单id
     * @param sdeptId 拟派部门编号
     * @return 已回复/''
     */
    List<CheckSendBack> checkSendBack(Integer wfId, String sdeptId);

    /**
     * 查找下级部门办理件
     * @param wfId 工单id
     * @param sdeptId 部门编号
     * @return 派单列表
     */
    List<MwfSendBack> listSendDeptSon(Integer wfId, Long sdeptId);

    /**
     * 查找下级部门办理件
     * @param wfId 工单id
     * @param sdeptId 部门编号
     * @return 派单列表
     */
    List<MwfSendBack> findSubDeptHandleWF(Integer wfId, Long sdeptId);

    /**
     * 查找下级部门办理件 使用当前派单id作为pid查询
     * @param sendId
     * @param sdeptId
     * @return
     */
    List<MwfSendBack> listSendSubDeptByPid(Integer sendId, Long sdeptId);

    /**
     * 派单情况列表
     * @param wfId 工单id
     * @return 列表数据
     */
    List<MwfSendBack> dealListJson(Integer wfId);

    /**
     * 延期申请情况列表
     * @param mwfDeferEty 信件延期查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<MwfDeferEty> mDeferResultJson(MwfDeferEty mwfDeferEty, String deptId);

    /**
     * 查找下级退回工单 - 全退工单
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 来源单位
     * @return 列表数据
     */
    List<Map<String, Object>> listAllSonABackJson(Long deptId, String workFormNo, String sdeptName);

    /**
     * 查找下级退回工单 - 待处理
     * @param deptId 部门编号
     * @param workFormNo 工单编号
     * @param sdeptName 来源单位
     * @return 列表数据
     */
    List<Map<String, Object>> listSonNABackJson(Long deptId, String workFormNo, String sdeptName,String spareString);


    List<Map<String, Object>> listSonNABackJson_gxq(Long deptId, String workFormNo, String sdeptName,String spareString);

    /**
     * 查询下级部门的信件未签收、未回复、退回和超期情况数据统计
     * 2022/12/29
     * @Param deptId 部门编号
     */
    List<Map<String,Object>> listSubStatisticsJson(@Param("deptId") Long deptId,boolean flag);

    /**
     * 查询市级已删除信件工单
     * @param deptId 登录用户部门编号
     * @param workFormNo 信件工单编号
     * @param mwfSendBack 信件拟派工单
     * @return
     */
    List<Map<String, Object>> deletedMailWFList(String deptId, String workFormNo, MwfSendBack mwfSendBack);

    boolean updateUrgeTransact(String sbId);

    /**
     * 加载下级已办毕 待处理列表数据
     * @param sendBackEty 查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<Map<String, Object>> listSonOverUntreatedJson(MwfSendBack sendBackEty, Long deptId);

    List<Map<String, Object>> listSonOverUntreatedJson_gxq(MwfSendBack sendBackEty, Long deptId);

    /**
     * 加载下级已办毕 已处理列表数据
     * @param sendBackEty 查询条件
     * @param deptId 部门编号
     * @return 列表数据
     */
    List<Map<String, Object>> listSonOverTreatedJson(MwfSendBack sendBackEty, Long deptId);

    /**
     * 签收列表 同源派单
     *
     * @param deptNo      登录用户部门编号
     * @param mwfSendBack 信件拟派工单
     * @return 列表数据
     */
    List<Map<String, Object>> notSignListJson(String deptNo,MwfSendBack mwfSendBack);

    /**
     * 待回复列表 同源再派
     *
     * @param deptNo      登录用户部门编号
     * @param mwfSendBack 信件拟派工单
     * @return 列表数据
     */
    List<Map<String, Object>> waitReplyListJson(String deptNo,MwfSendBack mwfSendBack);

    /**
     * 查找当前部门办理件
     * //TODO 待完善：使用pid
     * @param wfId    工单id
     * @param handleDeptId 部门编号
     * @return 派单列表
     */
    MwfSendBack curDeptHandleSend(Integer wfId, String handleDeptId);

    /**
     * 查询处理信件工单数据 未签收及退回工单
     * @param mwfSendBack 信件工单
     * @param deptNo 办理部门
     * @return
     */
    List<Map<String, Object>> notHandleMailJson(String deptNo,MwfSendBack mwfSendBack);

    List<Map<String, Object>> notHandleMailJson_gxq(String deptNo,MwfSendBack mwfSendBack);

    /**
     * 导出未处理信件工单数据
     * @param deptId 办理部门
     * @return
     */
    List<NotHandleMailExcel> notHandleMailExport(String deptId);

    /**
     * 上级催办信件工单数据
     * @param deptId 办理部门
     * @param mwfSendBack 信件派单
     * @return
     */
    List<Map<String, Object>> supUrgeMailOrderJson(String deptId, MwfSendBack mwfSendBack);

    /**
     * 导出上级催办信件工单数据
     * @param deptId 办理部门
     * @return
     */
    List<SupUrgeMailExcel> supUrgeMailOrderExport(String deptId);

    /**
     *
     * @param subDeptId
     * @param mwfSendBack
     * @return
     */
    List<Map<String, Object>> subDeptMailDetailJson(String subDeptId, MwfSendBack mwfSendBack);


    List<Map<String, Object>> subDeptMailDetailJson_gxq(String subDeptId, MwfSendBack mwfSendBack);

    /**
     * 未回复工单数量
     * @param deptId 部门编号
     * @return 总数
     */
    Integer countReplyChkJson(Long deptId);

    /**
     * 获取待本级回复的列表
     * @param num 获取条数
     * @param sbdeptId 办理部门编号
     * @return 数据集
     */
    List<MwfSendBack> getAWaitPeerReplyList(Integer num, String sbdeptId);

    /**
     * 审核本部门回复列表数据
     * 高新区
     * @param deptId 当前登录用户部门编号
     * @param queryConditionVo 查询参数
     * @return列表数据
     */
    List<Map<String, Object>> replyChkJsonData(Long deptId, QueryConditionVo queryConditionVo);

    /**
     * 本部门已办毕列表数据
     * 高新区
     * @param deptId 当前登录用户部门编号
     * @param queryConditionVo 查询参数
     * @return列表数据
     */
    List<Map<String, Object>> replyOverJsonData(String deptId, QueryConditionVo queryConditionVo);

    /**
     * 获取审核本部门回复列表数据
     * 高新区
     * @param deptId 当前登录用户部门编号
     * @param queryConditionVo 查询参数
     * @return列表数据
     */
    List<Map<String, Object>> getReplyChkJson(Long userId, Long deptId, QueryConditionVo queryConditionVo);

    List<Map<String, Object>> backPeerDeptAuditMJson(Long deptId, QueryConditionVo queryConditionVo);

    List<Map<String, Object>> backPeerDeptAuditMJson_gxq(Long deptId, QueryConditionVo queryConditionVo);

    List<Map<String, Object>> peerDeptNotPassJson(Long deptId, QueryConditionVo queryConditionVo);

    int dueWorkOrderCount(String deptId);

    /**
     * 待本部门回复列表数据
     * 高新区
     * @param deptNo 登录用户部门编号
     * @param qc 查询条件
     * @return 列表数据
     */
    List<Map<String, Object>> replyWaitJson_gxq(String deptNo, QueryConditionVo qc);


    /**
     * 待本部门回复列表数据导出
     *
     * @param deptNo 登录用户部门编号
     * @param qc 查询条件
     * @return 列表数据
     */
    List<ReplyWaitMailExcel> replyWaitJsonExport_gxq(String deptNo,QueryConditionVo qc);
}
